perm filename TC[D,SYS] blob
sn#553495 filedate 1975-12-09 generic text, type T, neo UTF8
COMMENT ⊗ VALID 00010 PAGES
RECORD PAGE DESCRIPTION
00001 00001
00002 00002 TITLE TC TAPE CONVERT
00003 00003 SUBTTL DATA STORAGE
00004 00004 SUBTTL ERRORS
00005 00005 SUBTTL OUTPUT STUFF
00007 00006 SUBTTL BEGIN HERE
00010 00007 SUBTTL TL RQ COMMAND
00012 00008 SUBTTL READ THE TAPE, ETC.
00013 00009 SUBTTL PROCESS A FILE
00017 00010 END BEGIN
00018 ENDMK
⊗;
TITLE TC TAPE CONVERT
SUBTTL REG STANFORD AI.
;READ FAILSAFE TAPES AND WRITE DISK FILES
A←1
B←2
C←3
D←4
W←5
X←6
Y←7
Z←10
K←11
L←12
M←13
N←14
R←15
P←17
PDLEN←40
MTA←←1
LST←←2
DSK←←3
OPDEF RESET [CALLI]
OPDEF EXIT [CALLI 12]
SUBTTL DATA STORAGE
PDLIST: BLOCK PDLEN
TIBUF: BLOCK 3
DOBUF: BLOCK 3
LSTBUF: BLOCK 3
LIST: 0 ;SET TO -1 WHEN LISTING NAMES ONLY
QMODE: 0 ;SET TO -1 TO ASK BEFORE EACH TRANSFER
WC: 0
WC1: 0
FILNAM: BLOCK 4
DEVNAM: 0 ;STRUCTURE NAME FROM TAPE
CRLF: BYTE(7)15,12
SUBTTL ERRORS
NODISK: OUTSTR [ASCIZ/DISK INIT FAILURE
/]
EXIT
NOFAIL: OUTSTR [ASCIZ/ASSIGN A TAPE LOGICAL NAME FAILSA AND START
/]
EXIT
NOENT: MOVEI B,[ASCIZ/ENTER FAILED /]
PUSHJ P,PUTSTR
MOVEM D,FILNAM+3
MOVE D,[A,,FILNAM]
BLT D,FILNAM+2
PUSHJ P,PUTFIL
MOVEI B,CRLF
PUSHJ P,PUTSTR
OUTSTR [ASCIZ/TYPE ANYTHING TO CONTINUE. /]
TTCALL 11,0
TTCALL 0,A
MOVE D,[FILNAM,,A]
BLT D,D
POPJ P,
INVHDR: OUTSTR [ASCIZ/HEADER RECORD IS INVALID.
/]
EXIT
SUBTTL OUTPUT STUFF
PUTCHR: SOSG LSTBUF+2
OUT LST,
JRST PUTCH1
OUTSTR [ASCIZ/OUTPUT ERROR ON TAPLST.$$$
/]
HALT .+1
PUTCH1: IDPB A,LSTBUF+1
TTCALL 1,A
POPJ P,
PUTSTR: HRLI B,440700
PUTST1: ILDB A,B
JUMPE A,CPOPJ
PUSHJ P,PUTCHR
JRST PUTST1
PUTDEC: IDIVI A,12
HRLM B,(P)
JUMPE A,.+2
PUSHJ P,PUTDEC
HLRZ A,(P)
ADDI A,"0"
JRST PUTCHR
PUTOCT: IDIVI A,10
HRLM B,(P)
JUMPE A,.+2
PUSHJ P,PUTOCT
HLRZ A,(P)
ADDI A,"0"
JRST PUTCHR
PUTSIX: MOVE B,A
PUTSX1: SETZ A,
JUMPE B,CPOPJ
LSHC A,6
ADDI A," "
PUSHJ P,PUTCHR
JRST PUTSX1
PUTFIL: MOVE A,FILNAM
PUSHJ P,PUTSIX
HLLZ B,FILNAM+1
JUMPE B,PUTFL1
MOVEI A,"."
PUSHJ P,PUTCHR
MOVE A,B
PUSHJ P,PUTSIX
PUTFL1: SKIPN FILNAM+3
POPJ P,
MOVEI A,"["
PUSHJ P,PUTCHR
HLLZ A,FILNAM+3
PUSHJ P,PUTSIX
MOVEI A,","
PUSHJ P,PUTCHR
HRLZ A,FILNAM+3
PUSHJ P,PUTSIX
MOVEI A,"]"
JRST PUTCHR
WRDOUT: SOSG DOBUF+2
OUT DSK,
JRST WRDOT1
OUTSTR [ASCIZ/DISK WRITE ERROR DURING RESTORE
/]
HALT .+1
WRDOT1: IDPB A,DOBUF+1
POPJ P,
SUBTTL BEGIN HERE
BEGIN: RESET
MOVE P,[IOWD PDLEN,PDLIST]
INIT MTA,614 ;800 BPI ODD
'FAILSA'
TIBUF
JRST NOFAIL
UINBF MTA,[2
1001] ;2 BUFFERS 1000 DATA WORDS EACH
INIT DSK,10 ;GET A DSK CHANNEL
'DSK '
DOBUF,,0
JRST NODISK
INIT LST,0 ;GET A DSK CHANNEL
'DSK '
LSTBUF,,0
JRST NODISK
OUTSTR [ASCIZ/RESTORE FAILSAFE TAPE TO DISK
/]
JRST CMD1
CMDH: ASCIZ/COMMANDS ARE:
W REWIND
L LIST ALL FILE NAMES ON THE TAPE
(ON TTY AND ON FILE TAPLST.$$$)
R RESTORE ALL FILES.
Q ASK ABOUT EACH FILE AND RESTORE IF REQUESTED.
H TO GET THIS LIST
E EXIT
/
CMD1: OUTSTR CMDH
CMDGET: OUTSTR [ASCIZ/*/]
CMDSKP: TTCALL 4,A
CAIE A," "
CAIN A,15
JRST CMDSKP
CAIN A,12
JRST CMDGET
CAIN A,"E"
CALLI 12
CAIN A,"H"
JRST [OUTSTR CMDH
JRST CMDSKP]
CAIN A,175
JRST [OUTSTR [ASCIZ/
/]
JRST CMDGET]
CAIN A,"W"
JRST [MTAPE MTA,1
MTAPE MTA,0
JRST CMDSKP]
CAIN A,"L"
JRST [SETOM LIST
PUSHJ P,TL
JRST CMDSKP]
CAIN A,"R"
JRST [SETZM QMODE
SETZM LIST
PUSHJ P,RQ
CLRBFI
JRST CMDGET]
CAIN A,"Q"
JRST [SETOM QMODE
SETZM LIST
TTCALL 11,0 ;FLUSH TYPE AHEAD
PUSHJ P,RQ
JRST CMDSKP]
OUTSTR [ASCIZ/UNRECOGNIZED COMMAND "/]
TTCALL 1,A
OUTSTR [ASCIZ/" FOR COMMAND LIST, TYPE H
/]
TTCALL 11,0
JRST CMDGET
SUBTTL TL RQ COMMAND
RQ:
TL: MOVE A,['TAPLST']
MOVSI B,'$$0'
SETZB C,D
ENTER LST,A
JRST [PUSHJ P,NOENT
POPJ P,]
TLL: PUSHJ P,TAPIN ;GET FIRST WORD OF SOME FILE.
JRST TLEOT ;END OF TAPE ASSUMED
HRRZM A,WC ;SAVE THE WORD COUNT
;HERE THE CHOICES ARE
; XWD V,4 V= FAILSAFE VERSION NUMBER
; XWD -1,N N= NUMBER OF DATA WORDS IN THIS RECORD
; (FILE HEADER)
JUMPL A,FH ;PROCESS A FILE HEADER
;HERE WE MUST HAVE A TAPE HEADER
PUSH P,A
MOVEI B,[ASCIZ/FAILSAFE VERSION /]
PUSHJ P,PUTSTR
POP P,A
HLRZ A,A
PUSHJ P,PUTOCT
PUSHJ P,TAPINX ;READ MORE
CAME A,['*FAILS']
JRST INVHDR
PUSHJ P,TAPINX
HLRZ B,A
CAIE B,'AFE'
JRST INVHDR
PUSH P,A
MOVEI B,[ASCIZ/ TAPE NUMBER /]
PUSHJ P,PUTSTR
POP P,A
HRRZ A,A
PUSHJ P,PUTDEC
MOVEI B,CRLF
PUSHJ P,PUTSTR
PUSHJ P,TAPINX
MOVNI A,4
ADDB A,WC
JUMPLE A,TLEOF ;END OF FILE IF WC EXHAUSTED.
PUSHJ P,TAPINX
SOSLE WC
JRST .-2
TLEOF: CLOSE MTA,
GETSTS MTA,A
TRZ A,20000
SETSTS MTA,(A)
JRST TLL
TAPINX: PUSHJ P,TAPIN
CAIA
POPJ P,
POP P,(P)
JRST TLEOF
TLEOT: OUTSTR [ASCIZ/LOGICAL END OF TAPE FOUND.
/]
CLOSE LST,
POPJ P,
SUBTTL READ THE TAPE, ETC.
TAPIN: SOSLE TIBUF+2 ;COUNT THE BUFFER DOWN
JRST TAPIN1 ;WE HAVE SOME ALREADY
INPUT MTA,
STATO MTA,762000 ;TEST ERROR, EOF, PHEOT
JRST TAPIN1 ;NO ERRORS
STATZ MTA,20000 ;EOF
POPJ P, ;YES. RETURN QUICK
STATZ MTA,2000 ;EOT
JRST TAPEOT
OUTSTR [ASCIZ/(MTA ERR)
/]
HALT .+1
MOVSI A,255000
MOVEM A,.-2
GETSTS MTA,A
TRZ A,740000
SETSTS MTA,(A)
TAPIN1: ILDB A,TIBUF+1
CPOPJ1: AOS (P)
CPOPJ: POPJ P,
TAPEOT: OUTSTR [ASCIZ/(PHYSICAL EOT)
/]
JRST TAPIN1
SUBTTL PROCESS A FILE
;HERE WHEN A FILE HEADER SEEN
FH: PUSHJ P,TAPINX ;GET THE STRUCTURE NAME
MOVEM A,DEVNAM ;SAVE DEVICE NAME
PUSHJ P,PUTSIX ;WRITE IT IN SIXBIT
MOVEI A,":"
PUSHJ P,PUTCHR
PUSHJ P,TAPINX ;READ 32.
SUBI A,4 ;DECREASE BY NUMBER OF WORD WE READ BY HAND
HRRZM A,WC1 ;SAVE SPECIAL WORD COUNT
ADDI A,6
MOVN A,A
ADDM A,WC ;SAVE WC
PUSHJ P,TAPINX ;GET THE PPN
MOVEM A,FILNAM+3 ;SAVE IT
PUSHJ P,TAPINX ;GET THE FILE NAME
MOVEM A,FILNAM ;SAVE NAME
PUSHJ P,TAPINX
MOVEM A,FILNAM+1
PUSHJ P,TAPINX ;READ ANOTHER WORD.
MOVEM A,FILNAM+2 ;SAVE CREATION DATE/TIME
MOVE B,WC1
PUSHJ P,TAPINX
SOJG B,.-1 ;SKIP OVER THE LOOKUP INFORMATION
PUSHJ P,PUTFIL ;TYPE THE FILE DATA
MOVEI B,CRLF
HLRZ C,FILNAM+1 ;CHECK THE EXTENSION
CAIN C,'UFD'
MOVEI B,[ASCIZ/ UFD FILES ARE NOT RESTORED.
/]
PUSHJ P,PUTSTR
CAIE C,'UFD'
SKIPE LIST ;ARE WE LISTING?
JRST FH2 ;YES. FLUSH FILE DOWN THE DRAIN
SKIPN QMODE ;ARE WE ASKING ABOUT EACH TRANSFER?
JRST FH1 ;NO WE DO THIS ONE
OUTSTR [ASCIZ/TYPE "Y" TO COPY THIS FILE: /]
TTCALL 0,A ;GET HIS ANSWER
TTCALL 11,
OUTSTR CRLF
TRZ A,40
CAIN A,"Y"
JRST FH1 ;DO IT
CAIE A,"G"
JRST FH2 ;DON'T DO IT
SETZM QMODE ;DON'T ASK AGAIN
FH1: MOVEI R,WRDOUT ;INITIALIZE R.
MOVE A,FILNAM
MOVE B,FILNAM+1
MOVE C,FILNAM+2
TLZ C,777000 ;ENTER WITH 0 PROTECTION
SETZ D,
ENTER DSK,A
PUSHJ P,NOENT
CAIA
FH2: MOVEI R,CPOPJ ;THE ADDRESS FOR WRITING.
FH3: SOSGE WC ;DECREMENT THE WORD COUNT
JRST FH4 ;ALL DONE WITH WORD COUNT
PUSHJ P,TAPINX ;READ THE TAPE.
PUSHJλβ,(R) ;WRITE
JRST FH3 ;LOOP
FH4: PUSHJ P,TAPIN ;READ ONE MORE
JRST FH5 ;END OF FILE IS A POSSIBILITY
FH4A: HRRZM A,WC ;SAVE WORD COUNT
JUMPG A,FH3 ;JUMP IF WE ARE STILL IN THE FILE.
SKIPN LIST ;DONT CLOSE IF NOT OPEN
CLOSE DSK,
JRST FH ;PROCESS ANOTHER FILE.
FH5: CLOSE MTA, ;CLOSE WHEN YOU SEE EOF
GETSTS MTA,A
TRZ A,20000
SETSTS MTA,(A)
PUSHJ P,TAPIN
JRST TLEOF
JRST FH4A
END BEGIN